import { ReqData, RespBody } from '@gal/base';

import deviceInfo from '@ohos.deviceInfo';

// http://rd.mailtech.cn/rd/coremail/api-docs/wmsvr.html#protocol-basic-concept
export enum CmResponseCode {
  S_OK = 'S_OK', // 	操作成功
  FA_NEED_VERIFY_CODE = 'FA_NEED_VERIFY_CODE', // 需要图形验证码
  FA_INVALID_VERIFY_CODE = 'FA_INVALID_VERIFY_CODE', // 图形验证吗错误
  // 二次验证相关
  FA_NEED_DYNAMIC_PWD = 'FA_NEED_DYNAMIC_PWD', // 需要二次验证
  FA_NEED_VERIFY_EMAIL = 'FA_NEED_VERIFY_EMAIL',
  FA_NEED_VERIFY_CELL = 'FA_NEED_VERIFY_CELL',
  S_PARTIAL_OK = 'S_PARTIAL_OK', // 	操作部分成功
  // == 系统错误分类 ==
  FS_UNKNOWN = 'FS_UNKNOWN', // 	未知错误
  FS_XXnnnn = 'FS_XXnnnn', // 	服务器错误 	[注1]
  // == 应用层分类 ==
  FR_INVALID_REQUEST = 'FR_INVALID_REQUEST', // 	非法请求，如格式错误，协议错误等
  FA_INVALID_PARAMETER = 'FA_INVALID_PARAMETER', // 	参数错误
  FA_XXXX_NOT_FOUND = 'FA_XXXX_NOT_FOUND', // 	表示某对象不存在，以至于无法进行后续操作
  FA_XXXX_EXISTS = 'FA_XXXX_EXISTS', // 	表示某对象已经存在，以至于无法进行后续操作
  FA_INVALID_SESSION = 'FA_INVALID_SESSION', // 	Session不合法，通常表示用户超时
  FA_SECURITY = 'FA_SECURITY', // 	提交的session没有通过安全检查，例如IP或cookie不匹配
  FA_UNAUTHORIZED = 'FA_UNAUTHORIZED', // 	验证密码失败，用户不存在，缺乏sid参数等所导致的操作不被允许
  FA_FORBIDDEN = 'FA_FORBIDDEN', // 	操作不允许 	[注2]
  FA_OVERFLOW = 'FA_OVERFLOW', // 	超过某项系统或用户限制导致操作不被允许
}

/**
 * 对于设备的描述
 */
export interface CmDevice {
  "uuid": string,
  "model": string,
  "os": string,
  "osLanguage": string,
  "deviceType": string,
  "friendlyName": string
}

export interface Cm2FaLoginRespObj {
  sid: string,
  supportAuthDevice: boolean,
  type: string,
  userAtDomain: string
}


export interface CmLoginRespObj {
  sid: string,
  uid: string,
  webname: string,
  nonce: string,
  primaryEmail: string
}


export interface CmRespBody<T> extends RespBody {
  var: T
  code: CmResponseCode;
}

export interface CmLoginReqData extends ReqData {
  //非信任设备上登录,需要二次验证.
  //是否信任设备,信任设备上ture,可以直接成功
  authDevice:boolean,
}

/**
 * 是否信任
 */
export interface Login2FAResult {
  sid: string,
  isAuthDevice: boolean
}